home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 3: Developer Tools / Linux Cubed Series 3 - Developer Tools.iso / devel / lang / tcl / xf2.3-p / xf2 / xf2.3 / src / xfgroups.tcl < prev    next >
Encoding:
Text File  |  1993-11-20  |  18.4 KB  |  563 lines

  1. # Program: xf
  2. # Description: set parameters for widget groups
  3. #
  4. # $Header: xfgroups.tcl[2.4] Wed Mar 10 12:05:59 1993 garfield@garfield frozen $
  5.  
  6. ##########
  7. # Procedure: XFGroups
  8. # Description: set parameters for widget groups
  9. # Arguments: none
  10. # Returns: none
  11. # Sideeffects: none
  12. ##########
  13. proc XFGroups {} {
  14.   global xfBind
  15.   global xfConf
  16.   global xfStatus
  17.  
  18.   # build widget structure
  19.   XFTmpltToplevel .xfGroups 460x420 \
  20.    "XF parameters for groups"
  21.  
  22.   label .xfGroups.message1 \
  23.     -relief raised \
  24.     -text "Set parameters for widget groups:"
  25.  
  26.   XFTmpltFrame .xfGroups.frame1 0
  27.  
  28.   button .xfGroups.frame1.ok \
  29.     -text {OK} \
  30.     -command {destroy .xfGroups}
  31.  
  32.   button .xfGroups.frame1.rescan \
  33.     -text {Rescan} \
  34.     -command {XFMiscReadTree . .xfGroups.frame2.widgets.widgets all sym}
  35.  
  36.   checkbutton .xfGroups.frame1.rescanperm \
  37.     -offvalue 0 \
  38.     -onvalue 1 \
  39.     -text {Rescan permanently} \
  40.     -variable xfConf(scanTree)
  41.  
  42.   XFTmpltFrame .xfGroups.frame4 0
  43.  
  44.   button .xfGroups.frame4.set \
  45.     -text {Apply} \
  46.     -command {
  47.       set xfResource [.xfGroups.resource.resource get]
  48.       set xfValue [string trim [XFMiscGetText .xfGroups.value.value]]
  49.       if {"$xfResource" != ""} {
  50.         set xfCounter 0
  51.         set xfLast [.xfGroups.frame2.selection.selection size]
  52.         if {"$xfLast" == "none"} {
  53.           set xfLast -1
  54.         }
  55.         while {$xfCounter < $xfLast} {
  56.           XFMiscSetResource \
  57.             [.xfGroups.frame2.selection.selection get $xfCounter] \
  58.             $xfResource $xfValue
  59.           incr xfCounter 1
  60.         }
  61.       } {
  62.         XFProcError "No resource name specified"
  63.       }}
  64.  
  65.   button .xfGroups.frame4.settree \
  66.     -text {Apply to subtree} \
  67.     -command {
  68.       set xfResource [.xfGroups.resource.resource get]
  69.       set xfValue [string trim [XFMiscGetText .xfGroups.value.value]]
  70.       if {"$xfResource" != ""} {
  71.         set xfCounter 0
  72.         set xfLast [.xfGroups.frame2.selection.selection size]
  73.         if {"$xfLast" == "none"} {
  74.           set xfLast -1
  75.         }
  76.         while {$xfCounter < $xfLast} {
  77.           XFMiscSetResourceToTree \
  78.             [.xfGroups.frame2.selection.selection get $xfCounter] \
  79.               $xfResource $xfValue
  80.           incr xfCounter 1
  81.         }
  82.       } {
  83.         XFProcError "No resource name specified"
  84.       }}
  85.  
  86.   button .xfGroups.frame4.scan \
  87.     -text {Search} \
  88.     -command {XFGroupsScan}
  89.  
  90.   button .xfGroups.frame4.clear \
  91.     -text {Clear selection} \
  92.     -command {XFMiscClearList .xfGroups.frame2.selection.selection}
  93.  
  94.   checkbutton .xfGroups.frame4.clearperm \
  95.     -text {Clear permanently} \
  96.     -offvalue 0 \
  97.     -onvalue 1 \
  98.     -variable xfStatus(clearSelection)
  99.  
  100.   XFTmpltFrame .xfGroups.frame2 0
  101.  
  102.   XFTmpltListbox .xfGroups.frame2 widgets
  103.   .xfGroups.frame2.widgets.widgets configure \
  104.     -geometry 16x30
  105.  
  106.   label .xfGroups.frame2.widgets.widgetsMess \
  107.     -relief raised \
  108.     -text {Widgets:}
  109.  
  110.   XFTmpltListbox .xfGroups.frame2 selection
  111.   .xfGroups.frame2.selection.selection configure \
  112.     -geometry 16x30
  113.  
  114.   label .xfGroups.frame2.selection.selectionMess \
  115.     -relief raised \
  116.     -text {Selection:}
  117.  
  118.   XFTmpltListbox .xfGroups.frame2 resources
  119.   .xfGroups.frame2.resources.resources configure \
  120.     -geometry 16x30
  121.  
  122.   XFTmpltFrame .xfGroups.frame3 0
  123.  
  124.   button .xfGroups.frame3.color \
  125.     -text {Color} \
  126.     -command "XFProcColorBox \"\[.xfGroups.resource.resource get\]\" .xfGroups.value.value"
  127.  
  128.   button .xfGroups.frame3.cursor \
  129.     -text {Cursor} \
  130.     -command "XFProcCursorBox \"\[.xfGroups.resource.resource get\]\" .xfGroups.value.value"
  131.  
  132.   button .xfGroups.frame3.font \
  133.     -text {Font} \
  134.     -command "XFProcFontBox \"\[.xfGroups.resource.resource get\]\" .xfGroups.value.value"
  135.  
  136.   button .xfGroups.frame3.pixmap \
  137.     -text {Pixmap} \
  138.     -command "XFProcFSBoxPixmap .xfGroups.value.value"
  139.  
  140.   button .xfGroups.frame3.file \
  141.     -text {File} \
  142.     -command "XFProcFSBoxFile .xfGroups.value.value"
  143.  
  144.   label .xfGroups.frame2.resources.resourcesMess \
  145.     -relief raised \
  146.     -text {Resources:}
  147.  
  148.   XFTmpltLabledEntry .xfGroups resource "Resource:"
  149.  
  150.   XFTmpltLabledEntry .xfGroups match "Match (shell style):"
  151.  
  152.   XFTmpltLabledEntry .xfGroups regexp "Regular expression:"
  153.  
  154.   label .xfGroups.message2 \
  155.     -relief raised \
  156.     -text {Value:}
  157.  
  158.   XFTmpltText .xfGroups value
  159.   XFMiscSetTextHeight \
  160.     ".xfGroups.value.value value" 4
  161.  
  162.   menu .xfGroups.frame2.widgets.widgets.m
  163.        .xfGroups.frame2.widgets.widgets.m add command \
  164.          -label {Parameters} \
  165.          -command {
  166.            XFProcConfParametersDefault \
  167.              [lindex [.xfGroups.frame2.widgets.widgets get \
  168.                [.xfGroups.frame2.widgets.widgets curselect]] 1]}
  169.        .xfGroups.frame2.widgets.widgets.m add separator
  170.        .xfGroups.frame2.widgets.widgets.m add command \
  171.          -label {Packing} \
  172.          -command {
  173.            XFProcConfPacking \
  174.              [lindex [.xfGroups.frame2.widgets.widgets get \
  175.                [.xfGroups.frame2.widgets.widgets curselect]] 1]}
  176.        .xfGroups.frame2.widgets.widgets.m add command \
  177.          -label {Placing} \
  178.          -command {
  179.            XFProcConfPlacing \
  180.              [lindex [.xfGroups.frame2.widgets.widgets get \
  181.                [.xfGroups.frame2.widgets.widgets curselect]] 1]}
  182.        .xfGroups.frame2.widgets.widgets.m add separator
  183.        .xfGroups.frame2.widgets.widgets.m add command \
  184.          -label {Binding} \
  185.          -command {
  186.            XFProcConfBinding \
  187.              [lindex [.xfGroups.frame2.widgets.widgets get \
  188.                [.xfGroups.frame2.widgets.widgets curselect]] 1]}
  189.        .xfGroups.frame2.widgets.widgets.m add separator
  190.        .xfGroups.frame2.widgets.widgets.m add command \
  191.          -label {Parameters (small)} \
  192.          -command {
  193.            XFProcConfParametersSmall \
  194.              [lindex [.xfGroups.frame2.widgets.widgets get \
  195.                [.xfGroups.frame2.widgets.widgets curselect]] 1]}
  196.        .xfGroups.frame2.widgets.widgets.m add command \
  197.          -label {Parameters (special)} \
  198.          -command {
  199.            XFProcConfParametersSpecial \
  200.              [lindex [.xfGroups.frame2.widgets.widgets get \
  201.                [.xfGroups.frame2.widgets.widgets curselect]] 1]}
  202.        .xfGroups.frame2.widgets.widgets.m add separator
  203.        .xfGroups.frame2.widgets.widgets.m add command \
  204.          -label {Paste} \
  205.          -command {
  206.            XFProcEditPaste [lindex [.xfGroups.frame2.widgets.widgets get \
  207.                          [.xfGroups.frame2.widgets.widgets curselect]] 1]}
  208.        .xfGroups.frame2.widgets.widgets.m add command \
  209.          -label {Copy} \
  210.          -command {
  211.            XFProcEditCopy [lindex [.xfGroups.frame2.widgets.widgets get \
  212.                         [.xfGroups.frame2.widgets.widgets curselect]] 1]}
  213.        .xfGroups.frame2.widgets.widgets.m add command \
  214.          -label {Cut} \
  215.          -command {
  216.            XFProcEditCut [lindex [.xfGroups.frame2.widgets.widgets get \
  217.                        [.xfGroups.frame2.widgets.widgets curselect]] 1]}
  218.        .xfGroups.frame2.widgets.widgets.m add command \
  219.          -label {Delete} \
  220.          -command {
  221.            XFProcEditDelete [lindex [.xfGroups.frame2.widgets.widgets get \
  222.                           [.xfGroups.frame2.widgets.widgets curselect]] 1]}
  223.  
  224.   XFMiscReadTree . .xfGroups.frame2.widgets.widgets all sym
  225.  
  226.   .xfGroups.frame2.resources.resources insert end \
  227.     "activebackground"
  228.   .xfGroups.frame2.resources.resources insert end \
  229.     "activeborderwidth"
  230.   .xfGroups.frame2.resources.resources insert end \
  231.     "activeforeground"
  232.   .xfGroups.frame2.resources.resources insert end \
  233.     "anchor"
  234.   .xfGroups.frame2.resources.resources insert end \
  235.     "background"
  236.   .xfGroups.frame2.resources.resources insert end \
  237.     "bitmap"
  238.   .xfGroups.frame2.resources.resources insert end \
  239.     "borderwidth"
  240.   .xfGroups.frame2.resources.resources insert end \
  241.     "cursor"
  242.   .xfGroups.frame2.resources.resources insert end \
  243.     "disabledforeground"
  244.   .xfGroups.frame2.resources.resources insert end \
  245.     "exportselection"
  246.   .xfGroups.frame2.resources.resources insert end \
  247.     "font"
  248.   .xfGroups.frame2.resources.resources insert end \
  249.     "foreground"
  250.   .xfGroups.frame2.resources.resources insert end \
  251.     "geometry"
  252.   .xfGroups.frame2.resources.resources insert end \
  253.     "insertbackground"
  254.   .xfGroups.frame2.resources.resources insert end \
  255.     "insertborderwidth"
  256.   .xfGroups.frame2.resources.resources insert end \
  257.     "insertofftime"
  258.   .xfGroups.frame2.resources.resources insert end \
  259.     "insertontime"
  260.   .xfGroups.frame2.resources.resources insert end \
  261.     "insertwidth"
  262.   if {$xfConf(kanji)} {
  263.     .xfGroups.frame2.resources.resources insert end \
  264.       "kanjifont"
  265.   }
  266.   .xfGroups.frame2.resources.resources insert end \
  267.     "label"
  268.   .xfGroups.frame2.resources.resources insert end \
  269.     "orient"
  270.   .xfGroups.frame2.resources.resources insert end \
  271.     "padx"
  272.   .xfGroups.frame2.resources.resources insert end \
  273.     "pady"
  274.   .xfGroups.frame2.resources.resources insert end \
  275.     "relief"
  276.   .xfGroups.frame2.resources.resources insert end \
  277.     "repeatdelay"
  278.   .xfGroups.frame2.resources.resources insert end \
  279.     "repeatinterval"
  280.   .xfGroups.frame2.resources.resources insert end \
  281.     "scrollcommand"
  282.   .xfGroups.frame2.resources.resources insert end \
  283.     "selectbackground"
  284.   .xfGroups.frame2.resources.resources insert end \
  285.     "selectborderwidth"
  286.   .xfGroups.frame2.resources.resources insert end \
  287.     "selectforeground"
  288.   .xfGroups.frame2.resources.resources insert end \
  289.     "setgrid"
  290.   .xfGroups.frame2.resources.resources insert end \
  291.     "state"
  292.   .xfGroups.frame2.resources.resources insert end \
  293.     "text"
  294.   .xfGroups.frame2.resources.resources insert end \
  295.     "textvariable"
  296.   .xfGroups.frame2.resources.resources insert end \
  297.     "underline"
  298.   .xfGroups.frame2.resources.resources insert end \
  299.     "wrap"
  300.   .xfGroups.frame2.resources.resources insert end \
  301.     "xscrollcommand"
  302.   .xfGroups.frame2.resources.resources insert end \
  303.     "yscrollcommand"
  304.  
  305.   # bindings
  306.   MenuPopupAdd .xfGroups.frame2.widgets.widgets $xfBind(popup) \
  307.     .xfGroups.frame2.widgets.widgets.m
  308.   bind .xfGroups.frame2.widgets.widgets "<ButtonPress-$xfBind(popup)>" {
  309.     XFBindSelectOne %W %y
  310.     XFGroupsSelectWidget %W %y
  311.     MenuPopupPost .xfGroups.frame2.widgets.widgets.m %X %Y}
  312.   bind .xfGroups.frame2.widgets.widgets $xfBind(select1) {
  313.     XFGroupsSelectWidget %W %y}
  314.   bind .xfGroups.frame2.widgets.widgets $xfBind(configure) {
  315.     XFBindSelectOne %W %y
  316.     set xfCurSelect [lindex [%W get [%W curselect]] 1]
  317.     XFGroupsSelectWidget %W %y
  318.     XFMiscFlash $xfCurSelect
  319.     XFProcConfParametersDefault $xfCurSelect}
  320.   bind .xfGroups.frame2.widgets.widgets $xfBind(select) {
  321.     XFBindSelectOne %W %y
  322.     set xfCurSelect [lindex [%W get [%W curselect]] 1]
  323.     XFEditSetPath $xfCurSelect
  324.     XFMiscFlash $xfCurSelect
  325.     XFGroupsSelectWidget %W %y}
  326.   bind .xfGroups.frame2.widgets.widgets $xfBind(showName) {
  327.     XFBindSelectOne %W %y
  328.     set xfCurSelect [lindex [%W get [%W curselect]] 1]
  329.     set xfCurSelect2 [%W get [%W curselect]]
  330.     XFEditSetPath $xfCurSelect
  331.     .xfEdit.curSelected delete 0 end
  332.     if {[llength $xfCurSelect2] == 2} {
  333.       .xfEdit.curSelected insert 0 [lindex $xfCurSelect2 1]
  334.     } {
  335.       .xfEdit.curSelected insert 0 "\[SymbolicName \{[lrange $xfCurSelect2 3 end]\}\]"
  336.     }
  337.     .xfEdit.curSelected select from 0
  338.     .xfEdit.curSelected select to end
  339.     XFGroupsSelectWidget %W %y}
  340.   bind .xfGroups.frame2.widgets.widgets <ButtonPress-1> {
  341.     XFGroupsSelectWidget %W %y}
  342.   bind .xfGroups.frame2.widgets.widgets <Button1-Motion> {
  343.     XFGroupsSelectWidget %W %y}
  344.   bind .xfGroups.frame2.widgets.widgets <Shift-ButtonPress-1> {
  345.     XFGroupsSelectWidget %W %y}
  346.   bind .xfGroups.frame2.widgets.widgets <Shift-Button1-Motion> {
  347.     XFGroupsSelectWidget %W %y}
  348.  
  349.   bind .xfGroups.frame2.selection.selection $xfBind(select1) {
  350.     XFBindSelectOne %W %y
  351.     if {[%W nearest %y] >= 0} {
  352.       %W delete [%W nearest %y]}}
  353.   bind .xfGroups.frame2.selection.selection <ButtonPress-1> {
  354.     XFBindSelectOne %W %y
  355.     if {[%W nearest %y] >= 0} {
  356.       %W delete [%W nearest %y]}}
  357.   bind .xfGroups.frame2.selection.selection <Button1-Motion> {
  358.     XFBindSelectOne %W %y
  359.     if {[%W nearest %y] >= 0} {
  360.       %W delete [%W nearest %y]}}
  361.   bind .xfGroups.frame2.selection.selection <Shift-ButtonPress-1> {
  362.     XFBindSelectOne %W %y
  363.     if {[%W nearest %y] >= 0} {
  364.       %W delete [%W nearest %y]}}
  365.   bind .xfGroups.frame2.selection.selection <Shift-Button1-Motion> {
  366.     XFBindSelectOne %W %y
  367.     if {[%W nearest %y] >= 0} {
  368.       %W delete [%W nearest %y]}}
  369.  
  370.   bind .xfGroups.frame2.resources.resources <ButtonPress-1> {
  371.     XFBindSelectOneIntoEntry %W %y .xfGroups.resource.resource}
  372.   bind .xfGroups.frame2.resources.resources <Button1-Motion> {
  373.     XFBindSelectOneIntoEntry %W %y .xfGroups.resource.resource}
  374.   bind .xfGroups.frame2.resources.resources <Shift-ButtonPress-1> {
  375.     XFBindSelectOneIntoEntry %W %y .xfGroups.resource.resource}
  376.   bind .xfGroups.frame2.resources.resources <Shift-Button1-Motion> {
  377.     XFBindSelectOneIntoEntry %W %y .xfGroups.resource.resource}
  378.  
  379.   bind .xfGroups.regexp.regexp <Return> {
  380.     XFGroupsScan}
  381.  
  382.   bind .xfGroups.match.match <Return> {
  383.     XFGroupsScan}
  384.  
  385.   # packing
  386.   pack before .xfGroups.frame2.widgets.vscroll \
  387.               .xfGroups.frame2.widgets.widgetsMess {top fillx}
  388.   pack before .xfGroups.frame2.selection.vscroll \
  389.               .xfGroups.frame2.selection.selectionMess {top fillx}
  390.   pack before .xfGroups.frame2.resources.vscroll \
  391.               .xfGroups.frame2.resources.resourcesMess {top fillx}
  392.   pack append .xfGroups.frame1 \
  393.               .xfGroups.frame1.ok {left fill expand} \
  394.               .xfGroups.frame1.rescan {left fill expand} \
  395.               .xfGroups.frame1.rescanperm {left fill expand}
  396.   pack append .xfGroups.frame4 \
  397.               .xfGroups.frame4.set {left fill expand} \
  398.               .xfGroups.frame4.settree {left fill expand} \
  399.               .xfGroups.frame4.scan {left fill expand} \
  400.               .xfGroups.frame4.clear {left fill expand} \
  401.               .xfGroups.frame4.clearperm {left fill expand}
  402.   pack append .xfGroups.frame2 \
  403.               .xfGroups.frame2.resources {right fill} \
  404.               .xfGroups.frame2.selection {right fill} \
  405.               .xfGroups.frame2.widgets {left fill expand}
  406.   pack append .xfGroups.frame3 \
  407.               .xfGroups.frame3.color {left fill expand} \
  408.               .xfGroups.frame3.cursor {left fill expand} \
  409.               .xfGroups.frame3.font {left fill expand} \
  410.               .xfGroups.frame3.pixmap {left fill expand} \
  411.               .xfGroups.frame3.file {left fill expand}
  412.   pack append .xfGroups \
  413.               .xfGroups.frame1 {bottom fill} \
  414.               .xfGroups.frame4 {bottom fill} \
  415.               .xfGroups.frame3 {bottom fill} \
  416.               .xfGroups.message1 {top fillx} \
  417.               .xfGroups.value {bottom fill} \
  418.               .xfGroups.message2 {bottom fillx} \
  419.               .xfGroups.resource {bottom fill} \
  420.               .xfGroups.regexp {bottom fill} \
  421.               .xfGroups.match {bottom fill} \
  422.               .xfGroups.frame2 {top fill expand}
  423. }
  424.  
  425. ##########
  426. # Procedure: XFGroupsScan
  427. # Description: search for widgets that match the current regexp
  428. # Arguments: none
  429. # Returns: none
  430. # Sideeffects: none
  431. ##########
  432. proc XFGroupsScan {} {
  433.   global xfStatus
  434.  
  435.   if {$xfStatus(clearSelection)} {
  436.     XFMiscClearList .xfGroups.frame2.selection.selection
  437.   }
  438.   set xfMatched 0
  439.   set xfRegexp [.xfGroups.regexp.regexp get]
  440.   set xfMatch [.xfGroups.match.match get]
  441.   if {"$xfRegexp" != "" || "$xfMatch" != ""} {
  442.     if {"$xfRegexp" != "" && ![catch "regexp \{$xfRegexp\} ." xfResult]} {
  443.       if {$xfResult == 1} {
  444.         set xfMatched 1
  445.       }
  446.     }
  447.     if {"$xfMatch" != "" && ![catch "string match \{$xfMatch\} ." xfResult]} {
  448.       if {$xfResult == 1} {
  449.         set xfMatched 1
  450.       }
  451.     }
  452.     if {$xfMatched} {
  453.       if {$xfResult == 1} {
  454.         set xfInsert 1
  455.         set xfCounter 0
  456.         set xfLast [.xfGroups.frame2.selection.selection size]
  457.         if {"$xfLast" == "none"} {
  458.           set xfLast -1
  459.         }
  460.         while {$xfCounter < $xfLast} {
  461.           if {"." == "[.xfGroups.frame2.selection.selection get $xfCounter]"} {
  462.             set xfInsert 0
  463.             break
  464.           }
  465.           incr xfCounter 1
  466.         }
  467.         if {$xfInsert} {
  468.           .xfGroups.frame2.selection.selection insert end .
  469.         }
  470.       }
  471.     }
  472.     XFGroupsScanTree . $xfRegexp $xfMatch
  473.   }
  474. }
  475.  
  476. ##########
  477. # Procedure: XFGroupsScanTree
  478. # Description: read the complete widget tree and enter matching widgets
  479. # Arguments: xfW - the current widget
  480. #            xfRegexp - the regular expression
  481. #            xfMatch - the match pattern
  482. # Returns: none
  483. # Sideeffects: none
  484. ##########
  485. proc XFGroupsScanTree {xfW xfRegexp xfMatch} {
  486.  
  487.   foreach xfCounter2 [winfo children $xfW] {
  488.     set xfMatched 0
  489.     if {![string match ".xf*" $xfCounter2] &&
  490.         ![string match "xf*" [winfo name $xfCounter2]]} {
  491.       if {"$xfRegexp" != "" &&
  492.           ![catch "regexp \{$xfRegexp\} $xfCounter2" xfResult]} {
  493.         if {$xfResult == 1} {
  494.           set xfMatched 1
  495.         }
  496.       }
  497.       if {"$xfMatch" != "" &&
  498.           ![catch "string match \{$xfMatch\} $xfCounter2" xfResult]} {
  499.         if {$xfResult == 1} {
  500.           set xfMatched 1
  501.         }
  502.       }
  503.       if {$xfMatched} {
  504.         set xfInsert 1
  505.         set xfCounter 0
  506.         set xfLast [.xfGroups.frame2.selection.selection size]
  507.         if {"$xfLast" == "none"} {
  508.           set xfLast -1
  509.         }
  510.         while {$xfCounter < $xfLast} {
  511.           if {"$xfCounter2" == "[.xfGroups.frame2.selection.selection get $xfCounter]"} {
  512.             set xfInsert 0
  513.             break
  514.           }
  515.           incr xfCounter 1
  516.         }
  517.         if {$xfInsert} {
  518.           .xfGroups.frame2.selection.selection insert end \
  519.             $xfCounter2
  520.         }
  521.       }
  522.       XFGroupsScanTree $xfCounter2 $xfRegexp $xfMatch
  523.     }
  524.   }
  525. }
  526.  
  527. ##########
  528. # Procedure: XFGroupsSelectWidget
  529. # Description: select the widget
  530. # Arguments: xfW - the list
  531. #            xfY - the y position in the list
  532. # Returns: none
  533. # Sideeffects: none
  534. ##########
  535. proc XFGroupsSelectWidget {xfW xfY} {
  536.  
  537.   set xfNearest [$xfW nearest $xfY]
  538.   if {$xfNearest >= 0} {
  539.     $xfW select from $xfNearest
  540.     $xfW select to $xfNearest
  541.     set xfTmpVal [lindex [$xfW get $xfNearest] 1]
  542.     set xfInsert 1
  543.     set xfCounter 0
  544.     set xfLast [.xfGroups.frame2.selection.selection size]
  545.     if {"$xfLast" == "none"} {
  546.       set xfLast -1
  547.     }
  548.     while {$xfCounter < $xfLast} {
  549.       if {"$xfTmpVal" == "[.xfGroups.frame2.selection.selection get $xfCounter]"} {
  550.         set xfInsert 0
  551.         break
  552.       }
  553.       incr xfCounter 1
  554.     }
  555.     if {$xfInsert} {
  556.       .xfGroups.frame2.selection.selection insert end $xfTmpVal
  557.     }
  558.   }
  559. }
  560.  
  561. # eof
  562.  
  563.